
namespace Core.Contracts.Interfaces
{
    using System.Text;
    using System.IO;

    /// <summary>
    /// Fitting export interface contract
    /// </summary>
    public interface IFittingExporter
    {
        /// <summary>
        /// Export a fitting instance to a string representation
        /// </summary>
        /// <param name="fitting">An instance of IFitting</param>
        /// <returns>A string representation of the IFitting instance or null</returns>
        string Export(IFitting fitting);
        /// <summary>
        /// Export a fitting instance to a string representation
        /// </summary>
        /// <param name="fitting">An instance of IFitting</param>
        /// <param name="stringBuilder">A StrinBuilder instance to use</param>
        void Export(IFitting fitting, StringBuilder stringBuilder);
        /// <summary>
        /// Export a fitting instance to a stream
        /// </summary>
        /// <param name="fitting">An IFitting instance</param>
        /// <param name="stream">A stream</param>
        void Export(IFitting fitting, Stream stream);
        /// <summary>
        /// Export a fitting instance to a stream
        /// </summary>
        /// <param name="fitting">An IFitting instance</param>
        /// <param name="stream">A stream</param>
        /// <param name="encoding">The Encoding to use</param>
        void Export(IFitting fitting, Stream stream, Encoding encoding);
    }
}